package com.udima.reglocation.util;


import org.apache.http.HttpResponse;

import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.util.Log;

public class HttpAsyncTask extends AsyncTask<String,Integer,String> {
	
	//Variables para redirigir el callback al activity invocador
	private Activity activity;
	private ProgressDialog dialog;
	private AsyncTaskCompleteListener callback;
	
	
	public HttpAsyncTask(Activity act) {
		this.activity = act;
		this.callback = (AsyncTaskCompleteListener)act;
	}
	
    protected String doInBackground(String... params) {

        String respStr = "";
        HttpClient httpClient = new DefaultHttpClient(); 
        
        HttpPost post = new HttpPost(params[0]);
        post.setHeader("content-type", "application/json; charset=utf-8");
        post.setHeader("Content-Encoding", "UTF-8");

    	try
        {
    		/*
	        //Construimos el objeto cliente en formato JSON
	        JSONObject dato = new JSONObject();

	        //Bucle para formaterar los parámetros como variable: valor en el objeto Json
	        for(int i=1;i<params.length;i=i+2){
	        	dato.put(params[i], params[i+1]);
	        }
	        
	        StringEntity entity = new StringEntity(dato.toString());
	        */
	        
    		//Pasamos el parámetro 1, es decir, el objeto json de la clase que se envía en formato string
	        StringEntity entity = new StringEntity(params[1]);
	        
	        post.setEntity(entity);
	        HttpResponse resp = httpClient.execute(post);
	        respStr = EntityUtils.toString(resp.getEntity());
	 
	    }
        catch(Exception ex)
        {
            Log.e("ServicioRest","Error!", ex);
        }
 
        return respStr;
    }
 
    protected void onPreExecute(){

		super.onPreExecute();
		
		//Antes de la ejecución se muestra el mensaje de espera que estará visible durante la consulta
		dialog = new ProgressDialog(activity);
		dialog.setMessage("Consultando...");
		dialog.show();
    }
    
    protected void onPostExecute(String result) {
    	
		super.onPostExecute(result);
		
		//Después de la ejecución, si hay mensaje de espera visible se elimina
		if (null != dialog && dialog.isShowing()) {
			dialog.dismiss();
		}
		
		
		//comprobar errores de sesion(responseErrors)
		// si no existe la sesion o ha expirado le mandamos al login
		        
        //Llamada al método de callback con el resultado de la consulta
        callback.onTaskComplete(result);
    }
}